﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "IGraphicsNode.h"
#include "Vector2i.h"
#include "PictureId.h"
#include "FilterMode.h"

namespace gcmp
{
    /// \brief 二维图片图形节点
    class GCMP_GRAPHICS_NODE_INTERFACE_EXPORT IGraphicsPicture : public IGraphicsNode
    {
        DEFINE_CAST_DERIVED(IGraphicsPicture, IGraphicsNode)

    public:
        /// \brief 析构器
        virtual ~IGraphicsPicture();


    public:
        /// \brief 获取图片标识id
        /// \return 图片标识id
        /// \see PictureId
        virtual PictureId GetPictureId() const = 0;

        /// \brief 获取图片路径
        /// \return 图片路径id
        virtual std::wstring GetPicturePath() const = 0;

        /// \brief 获取图片尺寸
        /// \return 图片尺寸
        virtual Vector2i GetPictureSize() const = 0;

        /// \brief 获取图片位置坐标
        /// \return 图片位置坐标
        virtual Vector3d GetPosition() const = 0;

        /// \brief 获取混合颜色
        ///
        /// \return 混合颜色
        virtual Color GetBlendingColor() const = 0;

        /// \brief 设置混合颜色
        ///
        /// 相当于给给图片中的每一个像素乘上设置的颜色(比如当前是白色的图片，Color设置为255， 0， 0， 最终的图片是红色的).
        /// 默认是白色的，相当于不起作用,最终得到的还是图片本身的颜色         
        virtual void SetBlendingColor(const Color& color) = 0;

        /// \brief 设置纹理过滤模式
        /// \param filterMode 纹理过滤模式
        /// 默认是未定义的，就不去更改filter类型
        virtual void SetFilterMode(const FilterMode& filterMode) = 0;

        /// \brief 获取纹理过滤模式
        ///
        /// \return 纹理过滤模式
        virtual FilterMode GetFilterMode() const = 0;

    public:
        /// \brief 通过图片标识id，图片路径，图片尺寸，图片位置坐标，来创建一个直线图形节点
        /// \param iPictureID       图片标识id
        /// \param strPicturePath    图片路径
        /// \param pictureSize     图片尺寸
        /// \param position     图片位置坐标
        /// \return 二维图片图形节点
        static OwnerPtr<IGraphicsPicture> Create(PictureId iPictureID, std::wstring strPicturePath, const Vector2i& pictureSize, const Vector3d& position);
    };
}

